(function (undefined) {

    (function (factory) {
        "use strict";

        // amd module
        if (typeof define === "function" && define.amd) {
            define(["jquery", "widget" /*,其他脚本文件名称请在这里填写，如'echarts'*/], factory);
        }
        // global
        else {
            factory();
        }

    })
    (function ($, widget /*,其他脚本文件对外暴露接口请在这里填写，如'charts'*/) {
        "use strict";

        //关于组件配置说明，请见"开发者中心"，搜索"388.组件设计"
        //关于代码调试工具的使用说明，请见"开发者中心"，搜索"397.开发者工具使用文档"
        //以下代码均可以删除，不用的功能，都删掉，减少代码冗余
        var Component = function ($widget, option, attr, css, auiCtx) {
            var context = this;

            //Data Model
            context.$view = $widget;
            context.option = option;
            context.attr = attr;
            context.css = css;
            context.pageContext = auiCtx;


            //View Model
            context.viewCache = {};

            //cache
            //context.cache={};

            //初始化
            context._init();

            //渲染样式
            context._render();

            //绑定事件
            context._listen();
        };


        //在代码中声明的接口，必须在"接口"配置中配置好，详情见各个接口的注释
        //一定要配置某个组件接口，才能在"前端逻辑引擎"和"开发者中心"中，引用或查看该接口
        //**关于组件接口是否配置正确，可以保存组件配置后，打开"开发者中心"-->"组件"-->打开当前组件，查看组件接口是否配置正确**
        //打开调试工具，选择"virtualizer"-->输入"auiCtx.variables.组件实例ID.接口名"，可以调试接口是否可行(397.开发者工具使用文档)
        Component.prototype = Component.fn = {
            constructor: Component,
            version: 'AWOS 5.1 SoY3',
            author: 'qinshuo',

            debugger: window.auiApp && window.auiApp.debugger,

            //常量表
            //constant:{},


            //初始化（私有）
            _init: function () {
                var $widget = this.$view,
                    html = this._create(this);
                $widget.empty().append(html.join(''));
                if (this.debugger) {
                    //如果在开发阶段，填充假数据
                    this._renderFakeData();
                }
            },
            //创建页面
            _create: function (that) {
                var htmlTemplate=[],
                    $widget=that.$view;
                htmlTemplate.push('')
                return htmlTemplate;
            },
            //事件绑定（私有）
            _listen: function () {
                var $widget = this.$view;
                //绑定事件，推荐使用事件冒泡
                //这里绑定的事件一定不能与业务逻辑有关的，否则应该在“事件配置”中定义

                $widget
                //解绑上次的事件
                    .off('.namespace')
                    //绑定事件
                    .on({
                        'eventType1.namespace': function (e) {
                            //使用兼容IE8事件兼容的用法
                            var $target = $(e.target || window.event.srcElement);

                            //判断$target是什么
                            if (
                                //判断target是否为a标签
                                $target.is('a') ||

                                //判断target是不是$widget
                                $target.is($widget) || $target.is(this) ||

                                //或者target是否有某个样式
                                $target.hasClass('.dataTables') ||

                                //触发的元素开始找，父辈是否有a标签
                                $target.closest('a').length
                            //其他选择器，请搜索“jQuery选择器”
                            ) {
                                //do something
                            }
                        },
                        'eventType2.namespace': function (e) {

                        },
                        //example,获取点击a标签的id
                        //事件-->触发范围 ###_ID## a，接口-->查看接口getter配置
                        'click.namespace': function (e) {
                            var $target = $(e.target || event.srcElement);

                            if ($target.is('a')) {
                                //例如 a标签的html为 <a data-href="bbb">Hello world</a>
                                cache.href = $target.attr('[data-href]');
                            }
                        }
                    });
            },

            //渲染主题、样式（私有）
            _render: function () {
                var $widget = this.$view,
                    css = this.css,
                    style;

                //css样式配置渲染
                if (css && css.theme) {
                    //如果组件配置了类名主题，则要同时将类名加到组件相应位置上去
                    /*
                             * 如 ：if(css.theme['function']){
                                 $button.removeClass().addClass('btn ' + css.theme['function']);
                             }*/
                }

                if (css && (style = css.style)) {
                    //1.直接拿到样式内容和选择器，利用jq的css()渲染配置样式
                    //2.利用 $AW.cssHover(select,$selector,content,pseudo)方法生成虚拟渲染样式，他将在组件dom结构后面插入内联样式，直接覆盖外联样式表里面的样式。
                    // 如：	$AW.cssHover('input.input-group-field',$selector,style.inputActive,':active');
                    /*
                             select：样式对应的选择器，如‘input.input-group-field’
                             $selector:组件操纵对象或组件选择器
                             content:css样式配置的内容
                             pseudo:伪类、伪元素,动态类名，如‘:hover\:focus\.btn-hover’.如果只想添加虚拟样式，可以直接传入 ‘’ 空字符串。
                             */
                }

            },
            destroy: function () {
                this.$view.off().empty();
            },
            getValue: function () {
                //return value;
            },
            setValue: function (linkList) {
                var //模板
                    TEMPLATE = '<a data-href="_value_">_name_</a>',
                    //填充数据
                    html = [],
                    //中间变量
                    i, item,

                    $widget = this.$view;

                //清空上次的内容
                $widget.empty();

                if (linkList === 'auiAjaxText') {
                    //此处为 AWEB IDE 下 异步传输数据测试信号
                } else if (linkList && linkList.length) {//校验输入数据
                    for (i = -1; item = linkList[++i];) {
                        html.push(
                            TEMPLATE
                                .replace(/_name_/ig, item.name)
                                .replace(/_value_/ig, item.href)
                        );
                    }
                    //填充内容
                    $widget.append(html.join(''));
                }
            },
            show: function () {
                this.$view.removeClass('hide');
            },
            hide: function () {
                this.$view.addClass('hide');
            },

            /*使用复制的getter、setter*/
            getter: function (key) {
                var ret = this.dataModule[key];

                return ret && typeof ret === 'object' ? JSON.parse(JSON.stringify(ret)) : ret;
            },
            setter: function (key, value) {
                var inner = value && typeof value === 'object' ? JSON.parse(JSON.stringify(value)) : value;

                this.dataModule[key] = inner;
            },

            /*
                    *   设置组件是否可用
                    * */
            disable: function (flag) {

            },

            //使用同一的缓存对象
            getCacheView: function (key, refresh) {
                var ret = this.viewCache[key];

                if (!ret || refresh) {
                    ret = this.viewCache[key] = $('[data-role="' + key + '"]', this.$view);
                }

                return ret;
            }
        };

        //下面的代码，如无必要，无需修改，但需要查看每个入参的意义
        widget.custom.matterMount = function ($widget, option, attr, css, auiCtx) {
            return new Component($widget, option, attr, css, auiCtx);
        };
    });
})();
